package com.yidu.service.impl;

import java.text.ParseException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Service;

import com.yidu.common.Tools;
import com.yidu.dao.ListenAuditingMapper;
import com.yidu.dao.ListenManufactureMapper;
import com.yidu.dao.ListenProductionDetailMapper;
import com.yidu.dao.ListenProductionMapper;
import com.yidu.domain.ListenAuditing;
import com.yidu.domain.ListenBackstageUser;
import com.yidu.domain.ListenManufacture;
import com.yidu.domain.ListenProduction;
import com.yidu.domain.ListenProductionDetail;
import com.yidu.service.ListenProductionService;

/**
 * @title 生产计划Service实现类 
 * @author 江宇
 * @dateTime 2019年1月14日
 */
@Service
public class ListenProductionServiceImpl implements ListenProductionService {
	@Resource
	ListenProductionMapper dao;
	@Resource
	ListenProductionDetailMapper pdDao;
	@Resource
	ListenAuditingMapper auDao;
	@Resource
	ListenManufactureMapper mfDao;
	
	/**
     * @title 查询生产计划
     * @param Map
     * @return List
     * @author 江宇
     * @dateTime 2018年12月17日
     * @versions 1.0
     */
	@Override
	public List<ListenProduction> findProduction(Map<String, Object> map) {
		 
		return dao.findProduction(map);
	}
	
	/**
     * @title 查询生产计划明细 
     * @param Map
     * @return int
     * @author 江宇
     * @dateTime 2018年12月17日
     * @versions 1.0
     */
	@Override
	public int findProductionCount(Map<String, Object> map) {
		 
		return dao.findProductionCount(map);
	}
	
	/**
     * @title 根据生产Id查询
     * @param String
     * @return ListenProduction
     * @author 江宇
     * @dateTime 2018年12月18日
     * @versions 1.0
     */
	@Override
	public ListenProduction findByProdId(String prodId) {
		 
		return dao.selectByPrimaryKey(prodId);
	}
	
	/**
     * @title 修改生产计划
     * @param ListenProduction
     * @return int
     * @author 江宇
     * @dateTime 2018年12月18日
     * @versions 1.0
     */
	@Override
	public int updateProduction(ListenProduction prod) {
		int rows=0;
		//创建生产计划明细类对象
		ListenProductionDetail pd=new ListenProductionDetail();
		//生产计划ID赋值
		pd.setProdId(prod.getProdId());
		//是否有效赋值
		pd.setIsva(prod.getIsva());
		//调用根据生产计划ID修改生产计划明细的方法
		rows=pdDao.updateByProdId(pd);
		//调用根据生产计划ID修改的方法
		rows=dao.updateByPrimaryKeySelective(prod);
		return rows;
	}
	
	/**
     * @title 增加和修改生产计划的方法 
     * @param String
     * @return int
     * @author 江宇
     * @dateTime 2018年12月18日
     * @versions 1.0
     */
	@Override
	public int addOrUpdate(String production, String musicalText,Integer addOrUpdate,HttpSession session) throws ParseException {
		//获取登陆的Session
		ListenBackstageUser users = (ListenBackstageUser) session.getAttribute("user");
		int rows=0;
		//如果增加修改属性等于2
		if(addOrUpdate==2) {
			//按,号拆分前台传来的生产计划字符串
			String productions[] =production.split(",");
			//创建生产计划明细Mao集合
			Map<String, Object> pdMap=new HashMap<>();
			//生产计划ID赋值
			pdMap.put("prodId", productions[0]);
			//调用查询生产计划明细的方法
			List<ListenProductionDetail> pdList=pdDao.findProductionDetail(pdMap);
			//循环查询生产计划明细的List集合
			for (ListenProductionDetail listenProductionDetail : pdList) {
				//调用根据生产计划明细ID删除生产计划明细的方法
				mfDao.deleteByPrimaryKey(listenProductionDetail.getPdId());
			}
			
			//按#号拆分前台传来的乐器字符串
			String musicalTexts[] =musicalText.split("#");
			//定义生产总数量
			Integer sumNumber=0;
			for (int i = 0; i < musicalTexts.length; i++) {
				sumNumber=sumNumber+Integer.valueOf(musicalTexts[i].split(",")[2]);
			}
			
			//调用根据生产计划ID删除生产计划的方法
			rows=pdDao.deleteByProdId(productions[0]);
			 
			//创建生产计划类对象
			ListenProduction prod=new ListenProduction();
			//生产计划ID赋值
			prod.setProdId(productions[0]);
			//开始时间赋值
			prod.setStartTime(Tools.SDF_TIME.parse(productions[3]+" 00:00:00"));
			//结束时间赋值
			prod.setEndTime(Tools.SDF_TIME.parse(productions[4]+" 23:59:59"));
			//生产许可赋值
			prod.setProdPermit(0);
			//生产总数量赋值
			prod.setProdNumber(sumNumber);
			//制造状态赋值
			prod.setManufactureType(0);
			//是否有效赋值(有效)
			prod.setIsva(1);
			//调用修改生产计划的方法
			rows=dao.updateByPrimaryKeySelective(prod);
			
			
			//循环乐器数组
			for (int i = 0; i < musicalTexts.length; i++) {
				//创建生产计划明细类对象
				ListenProductionDetail pd=new ListenProductionDetail();
				//UUID主键
				pd.setPdId(Tools.getRandomString(32));
				//生产计划ID赋值
				pd.setProdId(prod.getProdId());
				//乐器名称赋值
				pd.setMuName(musicalTexts[i].split(",")[1]);
				//生产计划明细数量赋值
				pd.setPdNumber(Integer.valueOf(musicalTexts[i].split(",")[2]));
				//乐器ID赋值
				pd.setMuId(musicalTexts[i].split(",")[0]);
				//是否有效(有效)
				pd.setIsva(1);
				//审核状态(未审核)
				pd.setPdStatus(0);
				//操作人赋值
				pd.setOper(users.getBuName());
				//调用增加生产计划明细的方法
				rows=pdDao.insertSelective(pd);
				
				 
			}
		}else {
			//按#号拆分前台传来的乐器字符串
			String musicalTexts[] =musicalText.split("#");
			//定义生产总数量
			Integer sumNumber=0;
			for (int i = 0; i < musicalTexts.length; i++) {
				sumNumber=sumNumber+Integer.valueOf(musicalTexts[i].split(",")[2]);
			}
			
			
			
			//按,号拆分前台传来的生产计划字符串
			String productions[] =production.split(",");
			//创建生产计划类对象
			ListenProduction prod=new ListenProduction();
			//UUID主键
			prod.setProdId(Tools.getRandomString(32));
			//开始时间赋值
			prod.setStartTime(Tools.SDF_TIME.parse(productions[3]+" 00:00:00"));
			//结束时间赋值
			prod.setEndTime(Tools.SDF_TIME.parse(productions[4]+" 23:59:59"));
			//生产许可赋值
			prod.setProdPermit(0);
			//生产总数量赋值
			prod.setProdNumber(sumNumber);
			//制造状态赋值
			prod.setManufactureType(0);
			//是否有效赋值(有效)
			prod.setIsva(1);
			//操作人赋值
			prod.setOper(users.getBuName());
			//调用增加生产计划的方法
			rows=dao.insertSelective(prod);
			
			
			
			
			
			 
			 
			//循环乐器数组
			for (int i = 0; i < musicalTexts.length; i++) {
				//创建生产计划明细类对象
				ListenProductionDetail pd=new ListenProductionDetail();
				//UUID主键
				pd.setPdId(Tools.getRandomString(32));
				//生产计划ID赋值
				pd.setProdId(prod.getProdId());
				//乐器名称赋值
				pd.setMuName(musicalTexts[i].split(",")[1]);
				//生产计划明细数量赋值
				pd.setPdNumber(Integer.valueOf(musicalTexts[i].split(",")[2]));
				//乐器ID赋值
				pd.setMuId(musicalTexts[i].split(",")[0]);
				//是否有效(有效)
				pd.setIsva(1);
				//审核状态(未审核)
				pd.setPdStatus(0);
				//操作人赋值
				pd.setOper(users.getBuName());
				//调用增加生产计划明细的方法
				rows=pdDao.insertSelective(pd);
				
			 
			}

		}
		
		
		
		
		
		
		return rows;
	}
	
	/**
     * @title 修改生产计划 
     * @param ListenProduction
     * @return int
     * @author 江宇
     * @dateTime 2018年12月26日
     * @versions 1.0
     */
	@Override
	public int update(ListenProduction prod) {
		
		return dao.updateByPrimaryKeySelective(prod);
	}

}
